package com.yxy.chatserver.controller;

import com.yxy.chatserver.domain.po.BaseMessage;
import com.yxy.chatserver.service.MessageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 消息控制器
 * 提供HTTP接口来处理消息相关的操作
 */
@RestController
@RequestMapping("/api/messages")
public class MessageController {
    
    @Autowired
    private MessageService messageService;
    
    /**
     * 获取用户的未读消息数量
     * @param userId 用户ID
     * @return 未读消息数量
     */
    @GetMapping("/unread/count")
    public ResponseEntity<Integer> getUnreadMessageCount(@RequestParam String userId) {
        List<BaseMessage> unreadBaseMessages = messageService.getUnreadMessages(userId);
        return ResponseEntity.ok(unreadBaseMessages.size());
    }
    
    /**
     * 获取用户的未读消息
     * @param userId 用户ID
     * @return 未读消息列表
     */
    @GetMapping("/unread")
    public ResponseEntity<List<BaseMessage>> getUnreadMessages(@RequestParam String userId) {
        List<BaseMessage> unreadBaseMessages = messageService.getUnreadMessages(userId);
        return ResponseEntity.ok(unreadBaseMessages);
    }
    
    /**
     * 标记消息为已读
     * @param messageId 消息ID
     * @return 操作结果
     */
    @PutMapping("/{messageId}/read")
    public ResponseEntity<String> markMessageAsRead(@PathVariable String messageId) {
        messageService.markMessageAsRead(messageId);
        return ResponseEntity.ok("消息已标记为已读");
    }
    
    /**
     * 标记用户的所有消息为已读
     * @param userId 用户ID
     * @return 操作结果
     */
    @PutMapping("/all/read")
    public ResponseEntity<String> markAllMessagesAsRead(@RequestParam String userId) {
        messageService.markAllMessagesAsRead(userId);
        return ResponseEntity.ok("所有消息已标记为已读");
    }
    
    /**
     * 获取两个用户之间的聊天记录
     * @param userId1 第一个用户ID
     * @param userId2 第二个用户ID
     * @param page 页码（默认0）
     * @param pageSize 每页大小（默认20）
     * @return 聊天记录列表
     */
    @GetMapping("/history")
    public ResponseEntity<List<BaseMessage>> getChatHistory(
            @RequestParam String userId1,
            @RequestParam String userId2,
            @RequestParam(defaultValue = "0") int page,
            @RequestParam(defaultValue = "20") int pageSize) {
        
        List<BaseMessage> chatHistory = messageService.getChatHistory(userId1, userId2, page, pageSize);
        return ResponseEntity.ok(chatHistory);
    }
    
    /**
     * 发送离线消息
     * 当用户不在线时，可以通过HTTP接口发送消息
     * @param baseMessage 消息对象
     * @return 操作结果
     */
    @PostMapping
    public ResponseEntity<String> sendOfflineMessage(@RequestBody BaseMessage baseMessage) {
        // 设置消息状态为已发送
        baseMessage.setStatus("sent");
        // 保存消息
        messageService.saveMessage(baseMessage);
        return ResponseEntity.ok("消息已保存，用户上线后将收到");
    }
}